#include <iostream>
#include <string>
#include <vector>

using namespace std;

//2.1��
/*
short��ʾ���������ͣ����ݳ���ҪС��int���ͣ�int���ͺ�long���ͳ�����ͬ��long long���͵ĳ�����Ҫ����ǰ�����������͡�
�޷������ͽ��ܱ�ʾ���ڵ���0��ֵ�����������б��ض������洢ֵ��
�����������ܱ�ʾ������������0�����������λΪ����λ��
floatΪ���������ͣ�����Ϊ6λ��
doubleΪ˫�������ͣ�����Ϊ10λ��
*/
//2.2 - 2.4��
int main()
{
	unsigned u = 10, u2 = 42;
	cout << u2 - u << endl; //32
	cout << u - u2 << endl; // -32(int) --> 4294967264(unsigned)
	int i = 10, i2 = 42;
	cout << i - u2 << endl; //4294967264
	cout << u2 - i << endl; //32
	cout << i - u2 << endl; //0
	return 0;
}
/*
�з��������޷�������һ���������ʱ��Ҫ���Ƚ��з�����ת��Ϊ�޷��������ٽ������㡣С��ȡ��ȡ�����С�ı�����
int�ͣ�4�ֽ� 2 ^ 31 - 1 = 2147483647   �޷��ţ�2 ^ 32 = 4294967296
- 32�ڼ�����б�ʾΪ�� 1000 0000 00000000 00000000 0010 0000�����룩
�ı����λ��0000 0000 00000000 00000000 0010 0000
������ʽ��  1111 1111 111111111 11111111 1101 1111  (4294967264)
2.5��
��a�����ַ�������ֵ��������char��L��a�������ַ��ͣ�������wchar_t;
��a�����ַ������ͣ�������string;  L��a�������ַ����ͣ�������wchar_t;
*/
//2.6��
int month = 9, day = 7;	  //month��day����ʾʮ��������
int month = 09, day = 07; //09��һ����Ч��8���Ʊ�ʾ��ʽ������07����һ��8��������
//2.7��
/*
"Who goes with F\145rgus?\012" ��ʾ��Who goes with Fergus ?
\145����8���Ʊ�ʾ���ַ� e   \012����8���Ʊ�ʾ�Ļ��з�
3.14e1L :31.4 Long Double�ͣ�1024.f ��float����
*/
//2.8��
cout << "2\t\115\012" << endl; //  2	M
//2.9��
cin >> int input_val;		   //�����壬������������治����ʹ����������Ӧ�ø�һ���Ѿ�����Ķ���
int i = {3.14};				   //����һ������i������Ϊ�ڸ���ֵdouble���͵�ֵ3.14�����ֱ�����󣺴�doubleת����int��Ҫ����ת����int i = {(int)3.14};
double salary = wage = 9999.0; //����δ�����ʶ��wage��
//2.11��
extern int ix = 1024; //�������������ix
int iy;				  //�������iy
extern int iz;		  //ֻ��������iz
//2.12��
int double = 3.14; //�Ƿ���doubleΪ�ؼ���
int _;			   //�Ϸ�
int 1_or_2 = 1;	   //�Ƿ�����ʶ�����������ֿ�ͷ
//2.13��
int i = 42;
int main()
{
	int i = 100;
	int j = i; //j=100
}
//2.14��
int main()
{
	int i = 100, sum = 0;
	for (int i = 0; i != 10; ++i)
		sum += i;
	cout << i << "  " << sum << endl; //���i��100��i
	return 0;
}
//�����100  45
//2.15 - 2.16��
int &ri;	  //�������ñ�����Ҫ�趨��ʼ��
int &ri = 10; //���󣺷ǳ���������ֵ����Ϊ��ֵ
int sum = 10;
int &ri = sum; //��ȷ
double d = 9.0;
int &a = d; //�������ò������ڲ�ͬ����֮��
//2.17��
int main()
{
	int i = 100, &r2 = i;
	i = 5;
	r2 = 10;
	cout << i << " " << r2 << endl;
	return 0;
}
//�����i = 10  r2 = 10    r2�ĸı�iҲ�ı䡣
//2.18��
int main()
{
	int val = 100;
	int *p = NULL;
	int **p2 = nullptr;
	if (p == nullptr)
		cout << "p=nullptr C++11 new standard" << endl;
	p = &val;
	p2 = &p;
	cout << *p << endl;	 //val��ֵ
	cout << &p << endl;	 //val�ĵ�ַ
	cout << *p2 << endl; //p��ֵ
	cout << &p2 << endl; //p2�ĵ�ַ
	return 0;
}
//2.19��
/*
ָ������ö��ǵ�ַ����ĸ��
һ����������һ������ı�����һ��һ�����ð󶨵�һ�������ϾͲ��ܸ��ĸ������ٰ󶨵����������ϣ�
��ָ����Ը�����Ҫ��ʱ�ı���ָ��Ķ���
����һ����ʼ���ͱ��븳��ֵ�˺��ܸı䣻ָ����Ը���ֵҲ�����õ���ʱ��ֵ��
*/
//2.20��
int i = 42;
int *p1 = &i;	 //ָ��piָ�����α���i
*p1 = *p1 * *p1; //ʹ�ý����ò�����i*i��ֵΪ1764
//2.21��
int i = 0;
��(a)
double *dp = &i;
�Ƿ���������һ�����α����ĵ�ַ��ʼ��һ��double���͵�ָ�룻(b) int *ip = i;
�Ƿ����Ⱥ��������Ͳ���(c)
int *p = &i;
�Ϸ�
//2.22��
p��һ��int��ָ�룺 if (p) //p�Ƿ���һ����ָ��
	if (*p)			  //pָ���ֵ�Ƿ���0
	//2.23��
	����һ��ָ�룬����֪����ָ����һ���Ϸ��Ķ�����Ϊ��Ҫ�������Ϣ���ж����ָ���Ƿ���Ч��
	//2.24��
	int i = 42;
void *p = &i;
long *lp = &i;
p�Ϸ�����Ϊvoid *������һ�������ָ�룬����ָ���κ����͵Ķ��󣻵��ǲ�����int *���ͳ�ʼ��һ�������͵�ָ�롣
	//2.25��
	(a) int *ip,
	i, &r = i;		//ip��һ��int���͵�ָ�룬i��һ�����α�����r�����α���i�����ã�
(b) int i, *ip = 0; // i��һ�����α�����ip��һ��int���͵Ŀ�ָ�룻
(c) int *ip, ip2;	// ip��һ��int���͵�ָ�룬ip2��һ�����α�����
//2.26:
const int buf; //�Ƿ���const������Ҫ��ʼ��
int cnt = 0;
const int sz = cnt;
++cnt;
++sz; //�Ƿ������ܸı�һ��������ֵ
//2.30��˵����Щ�Ƕ���const����Щ�ǵײ�const��
//����const : ָ�뱾���Ǹ�������
//�ײ�const : ָ����ָ�Ķ�����һ��������
const int v2 = 0;		  //����const:���Ա�ʾ����Ķ����ǳ���
const int *const p3 = p2; //�ұߵ�const�Ƕ���const����ߵ�const�ǵײ�const��
//2.32��
int null = 0, *p = null; //�Ƿ���int���͵�ֵ�������ڳ�ʼ��int*���͵�ʵ��
